package com.hzw.saas.api.rbac;

import java.util.List;

import com.hzw.saas.api.rbac.bo.PermissionBO;
import com.hzw.saas.api.rbac.bo.PermissionStructBO;
import com.hzw.saas.api.rbac.bo.PermissionTreeBO;
import com.hzw.saas.api.rbac.query.PermissionAddQuery;
import com.hzw.saas.api.rbac.query.PermissionUpdateQuery;

/**
 * 权限服务接口
 *
 * @author zzl
 * @since 08/30/2021
 */
public interface IPermissionService {

    /**
     * 获取所有权限列表
     *
     * @param sys 权限所属系统
     * @return list
     */
    List<PermissionBO> list(Integer sys);

    /**
     * 获取权限结构树
     *
     * @param sys 权限所属系统
     * @return list
     */
    List<PermissionStructBO> listStruct(Integer sys);

    /**
     * 根据type和父权限ID获取子权限树结构列表
     *
     * @param sys 权限所属系统
     * @param supId  上级权限ID，根权限上级ID为0
     * @param level  获取权限层级，null或小于0获取所有
     * @param types  types
     * @return list
     */
    List<PermissionTreeBO> listTree(Integer sys, String supId, Integer level, Integer... types);

    /**
     * 保存权限
     *
     * @param query 待保存数据
     * @return 权限数据(含PID)
     */
    PermissionBO save(PermissionAddQuery query);

    /**
     * 更新权限
     *
     * @param query 待更新数据
     * @return 更新结果 true|false
     */
    boolean update(PermissionUpdateQuery query);

    /**
     * 删除权限
     *
     * @param pid 权限PID
     * @return 删除结果 true|false
     */
    boolean delete(String pid);

}
